package nowCoder;
/**
 * 给定一个长度为N的整型数组arr，可以划分成左右两个部分： 
 * 左部分arr[0..K]，右部分arr[K+1..arr.length-1]，K可以取值的范围是[0,arr.length-2] 
 * 求这么多划分方案中，左部分中的最大值减去右部分最大值的绝对值，最大是多少？ 
 * 例如： [2,7,3,1,1] 当左部分为[2,7]，右部分为[3,1,1]时，左部分中的最大值减去右部分最大值的绝对值为4; 
 * 当左部分为[2,7,3]，右部分为[1,1]时，左部分中的最大值减去右部分最大值的绝对值为6; 最后返回的结果为6。
 *  注意：如果数组的长度为N，请尽量做到时间复杂度O(N)，额外空间复杂度O(1) 
 */
public class LeftMaxminusRightMax {
	public int getMaxABSLeftAndRight(int[] arr) {
		if(arr==null)
			return 0;
		if(arr.length==1)
			return arr[0];
		int max = arr[1];
		for(int i=1;i<arr.length;i++){
			if(arr[i]>max)
				max = arr[i];
		}
		int rst1 = Math.abs(max-arr[0]);
		
		max = arr[arr.length-1];
		for(int i=0;i<arr.length-1;i++)
			if(arr[i]>max)
				max = arr[i];
		int rst2 = Math.abs(max-arr[arr.length-1]);
		
		return rst1>rst2?rst1:rst2;
	}
	
	public static void main(String[] args){
		LeftMaxminusRightMax leftMaxminusRightMax = new LeftMaxminusRightMax();
		int[] arr = {1};
		System.out.println(leftMaxminusRightMax.getMaxABSLeftAndRight(arr));
	}
}
